﻿using System;
using System.Threading;

namespace CountdownEventDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个 CountdownEvent 实例，初始计数为 5  
            CountdownEvent countdown = new CountdownEvent(5);

            // 启动多个线程，每个线程执行一些工作后触发信号  
            for (int i = 0; i < 5; i++)
            {
                int finalCount = i; // 每个线程的工作完成后计数减少的值  
                new Thread(() =>
                {
                    Console.WriteLine($"线程 {Thread.CurrentThread.ManagedThreadId} 开始工作，剩余 {finalCount + 1} 个信号需要触发。");
                    Thread.Sleep(1000); // 模拟工作耗时  
                    
                    countdown.Signal(); // 触发信号，计数减一  
                    Console.WriteLine($"线程 {Thread.CurrentThread.ManagedThreadId} 工作完成，剩余 {countdown.CurrentCount} 个信号需要触发。");
                }).Start();
            }

            // 主线程等待所有工作完成（即计数达到零）  
            countdown.Wait(); // 这将阻塞，直到所有工作完成（即所有信号被触发）  
            Console.WriteLine("所有工作已完成！");
        }
    }
}
